﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cotizav.CONEXION;
using System.Data.Linq;
using System.Transactions;

namespace Cotizav
{
    public class CtrlMarca
    {
        private ConexionDataContext conexion;

        internal List<MARCA> getListMarca()
        {
            using (conexion = new ConexionDataContext())
            {
                try 	                
                {	        
		            var query = conexion.MARCA.Where(x => x.eliminado == 0).ToList();
                    return query;
	            }
	            catch (Exception)
	            {		
		            throw;
	            }
            }
        }

        internal MARCA getMarca(string idMarca)
        {
            using (conexion = new ConexionDataContext())
            {
                try
                {
                    return conexion.MARCA.SingleOrDefault(x => x.idMarca == idMarca && x.eliminado == 0);
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }

        internal List<MARCA> getListMarca(string idFamilia)
        {
            using (conexion = new ConexionDataContext())
            {
                try
                {
                    List<MARCA> result = new List<MARCA>();

                    List<FAMILIAXMARCA> marcasxfamilia = conexion.FAMILIAXMARCA.Where(x => x.idFamilia == idFamilia && x.eliminado == 0).ToList();

                    foreach (FAMILIAXMARCA fm in marcasxfamilia)
                    {
                        result.Add(getMarca(fm.idMarca));
                    }

                    return result;
                }
                catch (Exception)
                {                    
                    throw;
                }
            }
        }

        private void registrarFamiliaxMarca(FAMILIAXMARCA famxmarca)
        {
            using (conexion = new ConexionDataContext())
            {
                try
                {
                    conexion.FAMILIAXMARCA.InsertOnSubmit(famxmarca);
                    conexion.SubmitChanges();                 
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }

        internal void registrarListMarcaxFamilia(List<MARCA> marcas, string idFamilia)
        {
            using (conexion = new ConexionDataContext())
            {
                foreach (MARCA m in marcas)
                {
                    FAMILIAXMARCA famxmarca = new FAMILIAXMARCA()
                    {
                        idMarca = m.idMarca,
                        idFamilia = idFamilia,
                        eliminado = 0
                    };

                    this.registrarFamiliaxMarca(famxmarca);
                }
            }
        }

        internal void eliminarFamiliaxMarca(string idFamilia, MARCA marca)
        {
            using (conexion = new ConexionDataContext())
            {
                try
                {
                    FAMILIAXMARCA fxm = conexion.FAMILIAXMARCA.SingleOrDefault(x => x.idFamilia == idFamilia && x.idMarca == marca.idMarca && x.eliminado == 0);
                    fxm.eliminado = 1;

                    conexion.SubmitChanges();
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }

        internal bool actualizarMarca(string idMarca, MARCA m)
        {
            using (conexion = new ConexionDataContext())
            {
                bool result = false;
                try
                {
                    MARCA mar = conexion.MARCA.SingleOrDefault(x => x.idMarca == idMarca && x.eliminado == 0);
                    mar.nombreMarca = m.nombreMarca;

                    conexion.SubmitChanges();
                    result = true;
                    return result;
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }

        internal bool registrarMarca(MARCA mar)
        {
            using (TransactionScope transactionScope = new TransactionScope())
            {
                using (conexion = new ConexionDataContext())
                {
                    bool result = false;
                    try
                    {
                        //insertamos el id
                        int correlativoMarca = conexion.COTIZAV_CORRELATIVO.Single(x => x.IDENTIFICADOR == "COTIZAV").MARCA.Value;
                        string num = Convert.ToString(correlativoMarca);
                        string numero = num.Trim().PadLeft(10, '0');
                        string idMarca = "MARC_" + numero;

                        mar.idMarca = idMarca;

                        conexion.MARCA.InsertOnSubmit(mar);
                        conexion.SubmitChanges();
                        conexion.increm_ContMarca();
                        transactionScope.Complete();
                        result = true;
                        return result;
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                }
            }
        }

        internal bool verificarNombreMarca(string nombreMarca)
        {
            using (conexion = new ConexionDataContext())
            {
                bool result = false;
                var query = conexion.MARCA.Where(x => x.nombreMarca == nombreMarca && x.eliminado == 0);
                if (query.Count() > 0)
                {
                    result = true;
                }
                else
                {
                    result = false;
                }

                return result;
            }
        }
    }
}
